package sistemaAcademico.negocio;

import java.util.ArrayList;
import java.util.ResourceBundle;

import sistemaAcademico.cursoDAO.CursoDAO;
import sistemaAcademico.cursoDAO.CursoDAOArquivo;
import sistemaAcademico.cursoDAO.CursoDAOJDBC;
import sistemaAcademico.cursoDAO.CursoDTO;

public class Curso {
	private String nome;
	private String codigo;
	private int totalCreditos;
	private int totalSemestres;
	private char turno;
	private ArrayList<Disciplina> disciplinas;

	private static CursoDAO getDao() {
		CursoDAO dao = null;

		if (ResourceBundle
				.getBundle(
						"sistemaAcademico.interfaceUsuario.CursoMVC.resources.cursoDao")
				.getString("metodo").equals("arquivo"))
			dao = new CursoDAOArquivo();
		else if (ResourceBundle
				.getBundle(
						"sistemaAcademico.interfaceUsuario.CursoMVC.resources.cursoDao")
				.getString("metodo").equals("jdbc"))
			dao = new CursoDAOJDBC();

		return dao;
	}

	public Curso() {
		super();
	}

	public Curso(String codigo) {
		CursoDTO dto = getDao().encontrarCurso(codigo);

		this.nome = dto.getNome();
		this.codigo = dto.getCodigo();
		this.totalCreditos = dto.getTotalCreditos();
		this.totalSemestres = dto.getTotalSemestres();
		this.turno = dto.getTurno();

//		for (String cod : dto.getCodigosDisciplinas()) {
//			disciplinas.add(new Disciplina(cod));
//		}
		
	}

	public void salvar() {
		CursoDTO dto = new CursoDTO();

		dto.setNome(nome);
		dto.setCodigo(codigo);
		dto.setTotalCreditos(totalCreditos);
		dto.setTotalSemestres(totalSemestres);
		dto.setTurno(turno);		
		
		//FIXME
//		Disciplina c = new  Disciplina(codigo);
//		for (String cod : c.Disciplinas()) {//			
//			disciplinas.add(new Disciplina(cod));
//		}
//		dto.setCodigosDisciplinas(codigosDisciplinas);
		
		getDao().salvarCurso(dto);
	}
	
	public void update() {
		CursoDTO dto = new CursoDTO();

		dto.setNome(nome);
		dto.setCodigo(codigo);
		dto.setTotalCreditos(totalCreditos);
		dto.setTotalSemestres(totalSemestres);
		dto.setTurno(turno);
		dto.setTurno(turno);
		
		getDao().updateCurso(dto);
	}

	public void remover() {
		CursoDTO dto = new CursoDTO();

		dto.setNome(nome);
		dto.setCodigo(codigo);
		dto.setTotalCreditos(totalCreditos);
		dto.setTotalSemestres(totalSemestres);
		dto.setTurno(turno);
		// dto.setCodigosDisciplinas(codigosDisciplinas);

		getDao().removerCurso(dto);
	}

	public static ArrayList<Curso> getLista() {
		ArrayList<Curso> cursos = new ArrayList<Curso>();
		ArrayList<CursoDTO> dtos = getDao().getLista();
		for (CursoDTO dto : dtos) {
			Curso c = new Curso();

			c.setCodigo(dto.getCodigo());
			c.setNome(dto.getNome());
			c.setTotalCreditos(dto.getTotalCreditos());
			c.setTotalSemestres(dto.getTotalSemestres());
			c.setTurno(dto.getTurno());
			// c.setCodigosDisciplinas(dto.getCodigosDisciplinas());

			cursos.add(c);
		}
		return cursos;
	}

	public static void imprimirLista() {
		getDao().imprimirCursos();
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public int getTotalCreditos() {
		return totalCreditos;
	}

	public void setTotalCreditos(int totalCreditos) {
		this.totalCreditos = totalCreditos;
	}

	public int getTotalSemestres() {
		return totalSemestres;
	}

	public void setTotalSemestres(int totalSemestres) {
		this.totalSemestres = totalSemestres;
	}

	public char getTurno() {
		return turno;
	}

	public void setTurno(char turno) {
		this.turno = turno;
	}

	public ArrayList<Disciplina> getDisciplinas() {
		return disciplinas;
	}

	public void setDisciplinas(ArrayList<Disciplina> disciplinas) {
		this.disciplinas = disciplinas;
	}

}
